SHELL=/bin/sh

CC=gcc

# read options (such as -march) which are specific
# for a particular machine
#LOCAL_OPTIONS=`cat local_options`
#LOCAL_OPTIONS=-march=pentium4


#these are for testing
CFLAGS = -g -W -Wall -O2 -Winline

#these are for debugging
#CFLAGS = -g -W -Wall

#these are for maximum speed
#CFLAGS=-g -O3 -fomit-frame-pointer -W -Wall -Winline \
#       -DDEBUG=0 -DNDEBUG=1 $(LOCAL_OPTIONS)

# these are for profiling (-a?) 
#CFLAGS = -g -pg -O2 -W -Wall -Winline -DDEBUG=0


# uncomment for using huffman related compressor (you need huffrle.a)
USE_HUFFMAN= -D__USE_HUFFMAN__=1
HUFFMAN_FILES= huffrle_defs.o huffrle.a 

.PHONY: all
all : bst unbst


# library for lightweight sa/bwt/lcp computation
bwtlcp.a:
	make -C ./bwtlcp/
	cp -f ./bwtlcp/bwtlcp.a .
	cp -f ./bwtlcp/ds_ssort.a .

# library for huffrle compression
huffrle.a:
	make -C ./huffrle/ huffrlelib
	cp -f ./huffrle/huffrle.a .

# compression booster executable
bst: booster.o st_visit.o dummy_defs.o ac_defs.o wv_defs.o multihuff_defs.o\
        gdict_defs.o compr_defs.h booster.h range.h $(HUFFMAN_FILES)\
        range.o rc_defs.o bwtlcp.a ds_ssort.a
	$(CC) $(CFLAGS) -o bst booster.o st_visit.o dummy_defs.o wv_defs.o multihuff_defs.o range.o rc_defs.o ac_defs.o gdict_defs.o bwtlcp.a ds_ssort.a $(HUFFMAN_FILES) -lm

# decompression executable
unbst: unboost.o dummy_defs.o ac_defs.o wv_defs.o multihuff_defs.o\
        gdict_defs.o compr_defs.h booster.h range.h $(HUFFMAN_FILES)\
        range.o rc_defs.o bwtlcp.a ds_ssort.a
	$(CC) $(CFLAGS) -o unbst unboost.o dummy_defs.o \
	wv_defs.o multihuff_defs.o range.o rc_defs.o\
	ac_defs.o gdict_defs.o bwtlcp.a $(HUFFMAN_FILES) -lm \

        

# pattern rule for all objects files
%.o: %.c *.h
	$(CC) -c $(CFLAGS) $< -o $@ $(USE_HUFFMAN)

clean: 
	rm -f *.o *.a bst unbst
tarfile:
	tar zcvf booster.tgz ?akefile *.c *.h btest README COPYRIGHT \
            bwtlcp/* huffrle/*.c huffrle/*.h huffrle/makefile \
            DCtest? ESA_README ESA_test*


